package jp.ircbot.kaitvip.common;

import java.util.List;

import jp.ircbot.kaitvip.common.bean.PickedMessageBean;
import jp.ircbot.kaitvip.common.bean.SendMessageBean;

import org.jibble.pircbot.PircBot;

public class MyBot extends PircBot {

	// デフォルトニックネーム
	final private String DEFAULT_NICK_NAME = "vanilla_bot";

	private String nickName = DEFAULT_NICK_NAME;

	/**
	 * コンストラクタ
	 * 
	 * @param _nickName
	 *            ログインするニックネーム
	 */
	public MyBot(String _nickName) {
		if (_nickName != null && _nickName.equals("")) {
			this.nickName = _nickName;
		}
		setName(nickName);
		// 学習データ読み込み
		// fileRead(fileName,this.map);
		// 伝言読み込み
		// fileRead(dengonFileName,this.dengonmap);
		// ユーザデータ読み込み
		// fileRead(userDataFileName,this.userDatamap);
		// URLデータ読み込み
		// fileRead(urlData,this.urlDatamap);
	}

	// 強制切断時、復帰用
	public void onDisconnect() {
		while (!isConnected()) {
			try {
				reconnect();
			} catch (Exception e) {
				// Couldn't reconnect!
				// Pause for a short while...?
			}
		}
	}

	/**
	 * チャンネルに接続した時の動作
	 */
	public void onJoin(String channel, String sender, String login, String hostname) {
		if (!getNick().equals(sender) && !sender.equals("fem")) {
			sendMessage(channel, sender + "さん、こんにちは！");

			// 座布団を読み込む
			// readZabuton(channel, sender, login, hostname);
		}

		// 伝言機能
		// sendDengon(channel, sender, login, hostname);
	}

	/**
	 * メッセージ取得
	 */
	public void onMessage(String channel, String sender, String login, String hostname, String message) {

		PickedMessageBean messageBean = new PickedMessageBean(channel, sender, login, hostname, message);

		// Facade取得
		SuperFacade facadeObj = SuperFacade.getNewInstance(messageBean);

		// Facadeが取得できた場合は実行してメッセージを出力する
		if (facadeObj != null) {
			List<SendMessageBean> messageList = facadeObj.execute();
			for (SendMessageBean sendMessageBean : messageList) {
				sendMessage(sendMessageBean);
			}
		}
	}

	/**
	 * 発言
	 * 
	 * @param sendMessageBean
	 *            発言内容
	 */
	private void sendMessage(SendMessageBean sendMessageBean) {
		sendMessage(sendMessageBean.getChannel(), sendMessageBean.getMessage());

	}

}
